import { App } from 'vue'
// import { useUserStore } from '@/stores/user'

function checkPermission(el: any, binding: any) {
  // const user = useUserStore()
  // 获取绑定的值，此处为权限
  // const { value } = binding
  // console.log(binding.instance.$route)
  // 获取所有的功能指令
  // const btnPermissionsArr = binding.instance?.$route.meta.btnPermissions || []
  // const permissions = user.permissions
  // 当传入的指令集为数组时
  // if (value && value instanceof Array) {
  //   // 匹配对应的指令
  //   const hasPermission = permissions.some(permission => {
  //     return value.includes(permission)
  //   })
  //   if (!hasPermission) {
  //     el.parentNode && el.parentNode.removeChild(el)
  //   }
  // } else {
  //   throw new Error('v-has 的值必须是数组 例["admin","editor"]')
  // }
}

export default {
  install(app: App) {
    app.directive('has', {
      // 在绑定元素的父组件被挂载后调用
      mounted(el: any, binding: any) {
        checkPermission(el, binding)
      },
      // 在包含组件的 VNode 及其子组件的 VNode 更新后调用
      updated(el: any, binding: any) {
        checkPermission(el, binding)
      }
    })

    app.config.globalProperties.$_has = function (value: any[], permissions: any[]) {
      return permissions.some(permission => {
        return value.includes(permission)
      })
    }
  }
}
